package co.edu.uniquindio.ondas.daos;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import co.edu.uniquindio.ondas.entidades.Grupo;
/**
 * @version 1.0
 * @author Javier
 * 
 * Session Bean implementation class GrupoDAO
 * 
 * @param Grupo hace referencia a la entidad que va hacer manejada por el DAO.
 * @param Long especifica cual es el tipo de dato de la llave primaria de la entidad. 
 */
public class GrupoDAO extends DAO<Grupo, Long>{

	/**
	 * Manejador de la Persistencia
	 */
	EntityManager entityManager;
	public GrupoDAO(EntityManager entityManager) {
		super(entityManager);
		this.entityManager=entityManager;
	}

	@Override
	protected Class<Grupo> getEntityClass() {
			return Grupo.class;
	}
	
	/**
	 * Metodo que permite consultar y obtener el identificador de un Grupo dado su nombre
	 * @param grupo
	 * @return Indentificacion de un Grupo
	 */
	public long getGrupoId(String grupo)
	{
		Query query=entityManager.createQuery("select gru.identificacion from Grupo gru where gru.login=:parametro");
		query.setParameter("parametro", grupo);
		return (Long) query.getSingleResult();
	}

	
	/**
	 * Metodo que permite consultar y obtener el Grupo dado su nombre
	 * @param grupoNombre
	 * @return Grupo
	 */
	public Grupo getGrupo(String grupoNombre)
	{
		Query query=entityManager.createQuery("select grupo from Grupo grupo where grupo.login=:parametro");
		query.setParameter("parametro", grupoNombre);
		return (Grupo) query.getSingleResult();
		
	}
	
	/**
	 * Metodo que permite consultar y obtener una Lista de los Grupos sin Investigacion Asignada
	 * @return Lista de los Grupos sin Investigacion
	 */
	@SuppressWarnings("unchecked")
	public List<String> getGruposSinInv()
	{
		Query query=entityManager.createQuery("SELECT grupo.login FROM Grupo grupo WHERE grupo.investigaciones IS EMPTY");
		
		return query.getResultList();
	}
}
